#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>


int main()
{
        pid_t pid,ppid,pid_fils;
        int status;
       
        ppid=getppid();
        fprintf(stdout,"ppid avant fork est %d \n",ppid);
       
        pid=getpid();
        fprintf(stdout,"pid avant fork est %d \n",pid);
               
        pid=fork();
       
        if (pid==0){
                fprintf(stdout,"Je suis le fils,        mon pid est %d ,        mon ppid est %d \n",getpid(),getppid());
                pid_fils=fork();
                waitpid(pid,&status,0); /* Pour eviter de creer des zombies*/


               
                if(pid_fils==0)
                {
                        fprintf(stdout,"Je suis le petit fils,  mon pid est %d ,        mon ppid est %d \n",getpid(),getppid());
                        waitpid(pid_fils,&status,0); /* Pour eviter de creer des zombies*/

                       
                }
        }
       
        else if(pid !=-1){
                fprintf(stdout,"Je suis le pere,        mon pid est %d ,        mon ppid est %d \n",getpid(),getppid());
                waitpid(pid,&status,0); /* Pour eviter de creer des zombies*/

        }
        /*else if (pid ==1){
                fprintf(stdout,"Je suis le petit fils,  mon pere est %d ,       mon ppid est %d \n",getpid(),getppid());
        }*/
        else
        {       perror("Erreur !!!!!!!!!!!! \n");
                return 1;
        }
       
         
                sleep(3);
                system("ps -aux");
        return 0;
}
    
